﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using hotelservices;
using hotelservices.app_code.ds;

namespace hotelservices
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "Service1" en el código, en svc y en el archivo de configuración a la vez.
    // NOTA: para iniciar el Cliente de prueba WCF para probar este servicio, seleccione Service1.svc o Service1.svc.cs en el Explorador de soluciones e inicie la depuración.
    
    public class Service1 : IService1
    {

        //Login

        public bool login(string email, string contrasena)
        {
            AgenciaDS agenciaDS = new AgenciaDS();
            agencia res = agenciaDS.getAgenciaByEmail(email);
            if (res!=null && res.contrasena == contrasena)
                return true;
            return false;
        }

        //Get Operations

        public AgenciaDC getAgenciaByEmail(string email)
        {
            AgenciaDS agenciaDS = new AgenciaDS();
            agencia res= agenciaDS.getAgenciaByEmail(email);
            AgenciaDC agencia = null;
            if (res != null)
            {
                agencia = new AgenciaDC();
                agencia.Idagencia = res.idagencia;
                agencia.Nombre = res.nombre;
                agencia.Email = res.email;
                agencia.Contrasena = res.contrasena;
                agencia.reservas = res.reservas;
            }
            return agencia;
        }

        public List<AgenciaDC> getAllAgencias()
        {
            AgenciaDS agenciaDS = new AgenciaDS();
            return agenciaDS.getAllAgencias();
        }

        public HotelDC getHotelById(int id)
        {
            HotelDS hotelDS = new HotelDS();
            hotel res = hotelDS.getHotelById(id);
            HotelDC hotel = null;
            if (res != null)
            {
                hotel = new HotelDC();
                hotel.Idhotel = res.idhotel;
                hotel.Nombre = res.nombre;
                hotel.Numpisos = res.numpisos;
                hotel.Habporpiso = res.habporpiso;
                if (res.cuarto != null)
                {
                    CuartoDC aux;
                    List<CuartoDC> list = new List<CuartoDC>();
                    for (int i = 0; i < res.cuarto.Count; i++)
                    {
                        aux = new CuartoDC();
                        aux.Idcuarto = res.cuarto.ElementAt(i).idcuarto;
                        aux.Capacidad = res.cuarto.ElementAt(i).capacidad;
                        aux.Precio = res.cuarto.ElementAt(i).precio;
                        aux.Piso = res.cuarto.ElementAt(i).piso;
                        aux.Fk_hotel = res.cuarto.ElementAt(i).fk_hotel;
                        if (res.cuarto.ElementAt(i).fk_reserva != null)
                            aux.Fk_reserva = (long)res.cuarto.ElementAt(i).fk_reserva;
                        aux.Numhab = res.cuarto.ElementAt(i).numhab;
                        list.Add(aux);
                    }
                    hotel.cuarto = list;
                }
            }
            return hotel;
        }

        public List<HotelDC> getAllHotel()
        {
            HotelDS hotelDS = new HotelDS();
            return hotelDS.getAllHoteles();
        }

        public CuartoDC getCuartoById(int id)
        {
            CuartoDS cuartoDS = new CuartoDS();
            cuarto res = cuartoDS.getCuartoById(id);
            CuartoDC cuarto = null;
            if (res != null)
            {
                cuarto = new CuartoDC();
                cuarto.Idcuarto = res.idcuarto;
                cuarto.Capacidad = res.capacidad;
                cuarto.Precio = res.precio;
                cuarto.Piso = res.piso;
                cuarto.Fk_hotel = res.fk_hotel;
                if (res.fk_reserva!=null)
                    cuarto.Fk_reserva = (long) res.fk_reserva;
                cuarto.Numhab = res.numhab;
            }
            return cuarto;
        }

        public List<CuartoDC> getCuartosByReserva(int fk_reserva)
        {
            CuartoDS cuartoDS = new CuartoDS();
            List<cuarto> res = cuartoDS.getCuartoByReserva(fk_reserva);
            List<CuartoDC> cuartos = null;
            if (res != null)
            {
                CuartoDC aux;
                for (int i = 0; i < res.Count(); i++)
                {
                    aux = new CuartoDC();
                    aux.Idcuarto = res.ElementAt(i).idcuarto;
                    aux.Capacidad = res.ElementAt(i).capacidad;
                    aux.Precio = res.ElementAt(i).precio;
                    aux.Piso = res.ElementAt(i).piso;
                    aux.Fk_hotel = res.ElementAt(i).fk_hotel;
                    aux.Fk_reserva = (long)res.ElementAt(i).fk_reserva;
                    aux.Numhab = res.ElementAt(i).numhab;
                }
            }
            return cuartos;
        }

        public ReservasDC getReservaById(int id)
        {
            ReservasDS reservaDS = new ReservasDS();
            reservas res = reservaDS.getReservaById(id);
            ReservasDC reserva = null;
            if (res != null)
            {
                reserva = new ReservasDC();
                reserva.Idreserva = res.idreserva;
                reserva.Fecha_ingreso = res.fecha_ingreso;
                reserva.Fecha_salida = res.fecha_salida;
                reserva.Total = res.total;
                reserva.Abono = res.abono;
                reserva.Fk_agencia = res.fk_agencia;
                reserva.Fk_usuario = res.fk_usuario;
            }
            return reserva;
        }

        public List<ReservasDC> getReservasByAgencia(int id)
        {
            ReservasDS reservasDS = new ReservasDS();
            List<reservas> res = reservasDS.getReservasByAgencia(id);
            List<ReservasDC> reservas = null;
            if (res != null)
            {
                reservas = new List<ReservasDC>();
                ReservasDC aux;
                for (int i=0;i<res.Count();i++)
                {
                    aux = new ReservasDC();
                    aux.Idreserva = res.ElementAt(i).idreserva;
                    aux.Fecha_ingreso = res.ElementAt(i).fecha_ingreso;
                    aux.Fecha_salida = res.ElementAt(i).fecha_salida;
                    aux.Total = res.ElementAt(i).total;
                    aux.Abono = res.ElementAt(i).abono;
                    aux.Fk_agencia = res.ElementAt(i).fk_agencia;
                    aux.Fk_usuario = res.ElementAt(i).fk_usuario;
                    reservas.Add(aux);
                }
            }
            return reservas;
        }

        public UsuariosDC getUsuarioById(int id)
        {
            UsuariosDS usuariosDS = new UsuariosDS();
            usuarios user = usuariosDS.getUsuarioById(id);
            UsuariosDC res = null;
            if (user != null)
            {
                res = new UsuariosDC();
                res.Idusuario = user.idusuario;
                res.Nombre = user.nombre;
                res.Apellidos = user.apellidos;
                res.Pais = user.pais;
                res.Direccion = user.direccion;
                res.Ciudad = user.ciudad;
                res.Estado = user.estado;
                res.Telefono = user.telefono;
                res.Email = user.email;
            }
            return res;
        }

        public List<UsuariosDC> getAllUsuarios()
        {
            UsuariosDS usuariosDS = new UsuariosDS();
            List<usuarios> usuarios = usuariosDS.getAllUsuarios();
            List<UsuariosDC> res = null;
            if (usuarios != null)
            {
                UsuariosDC aux;
                for (int i = 0; i < usuarios.Count(); i++)
                {
                    aux = new UsuariosDC();
                    aux.Idusuario = usuarios.ElementAt(i).idusuario;
                    aux.Nombre = usuarios.ElementAt(i).nombre;
                    aux.Apellidos = usuarios.ElementAt(i).apellidos;
                    aux.Pais = usuarios.ElementAt(i).pais;
                    aux.Direccion = usuarios.ElementAt(i).direccion;
                    aux.Ciudad = usuarios.ElementAt(i).ciudad;
                    aux.Estado = usuarios.ElementAt(i).estado;
                    aux.Telefono = usuarios.ElementAt(i).telefono;
                    aux.Email = usuarios.ElementAt(i).email;
                }
            }
            return res;
        }

        //Set Operations

        public bool setUsuarios(UsuariosDC usuario)
        {
            UsuariosDS usuariosDS = new UsuariosDS();
            return usuariosDS.save(usuario);
        }

        public bool setReservas(ReservasDC reserva)
        {
            ReservasDS reservasDS = new ReservasDS();
            return reservasDS.save(reserva);
        }

        public bool setCuarto(CuartoDC cuartos)
        {
            CuartoDS cuartoDS = new CuartoDS();
            return cuartoDS.save(cuartos);
        }

        public bool setAgencia(AgenciaDC agencias)
        {
            AgenciaDS agenciaDS = new AgenciaDS();
            return agenciaDS.save(agencias);
        }

        public bool setHotel(HotelDC hoteles)
        {
            HotelDS hotelDS = new HotelDS();
            return hotelDS.save(hoteles);
        }

        //Update Operations

        public bool updateReservas(ReservasDC reserva)
        {
            ReservasDS reservasDS = new ReservasDS();
            return reservasDS.update(reserva);
        }

        public bool updateUsuarios(UsuariosDC usuario)
        {
            UsuariosDS usuariosDS = new UsuariosDS();
            return usuariosDS.update(usuario);
        }

        public bool updateCuarto(CuartoDC cuartos)
        {
            CuartoDS cuartoDS = new CuartoDS();
            return cuartoDS.update(cuartos);
        }

        public bool updateAgencia(AgenciaDC agencias)
        {
            AgenciaDS agenciaDS = new AgenciaDS();
            return agenciaDS.update(agencias);
        }

        public bool updateHotel(HotelDC hoteles)
        {
            HotelDS hotelDS = new HotelDS();
            return hotelDS.update(hoteles);
        }

    }
}
